﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _2016._12.Practice
{
    class Program
    {
        static void Main(string[] args)
        {
            string choice = "n";
            do
            {
                Console.Clear();
                Console.WriteLine("Выберите операцию:");
                int method = Int32.Parse(Console.ReadLine());
                switch (method)
                {
                    case 1:
                        ArrayMaxNumber();
                        break;
                    case 2:
                        ArrayCountsElementsGreaterOnFiveThanMinValue();
                        break;
                    case 3:
                        SumElemetsOfArrayBeforeFirstMaxValue();
                        break;
                    case 4:
                        PrintValueAndIndexLastNegativeNumber();
                        break;
                    case 5:
                        PrintModifiedArrayMidValuesAfterMaxValue();
                        break;
                    default:
                        Console.WriteLine("Вы ввели неверный номер операции");
                        break;
                }
                Console.WriteLine();
                Console.WriteLine("You want continue: y/n");
                choice = Console.ReadLine();
            }
            while (choice == "y");
        }
        static void ArrayMaxNumber()
        {
            int[] array = new int[5];
            array = EnterArrayValues(5);
            PrintArrayValues(array);
            Console.WriteLine();
            Console.WriteLine("Максимальное значение в массиве: " + array.Max());
        }
        static void ArrayCountsElementsGreaterOnFiveThanMinValue()
        {
            int number = 0;
            Console.WriteLine("Введите количество элементов массива:");
            int count = Int32.Parse(Console.ReadLine());
            int[] massiv = new int[count];
            massiv = EnterArrayValues(count);
            int min;
            min = massiv.Min();
            for (int i=0; i < massiv.Length; i++)
            {
                if (massiv[i] - min == 5)
                    number++;
            }
            PrintArrayValues(massiv);
            Console.WriteLine();
            Console.WriteLine("Минимальный элемент массива: " + min);
            Console.WriteLine();
            Console.WriteLine("Количество элементов массива, больших от минимального на 5: " + number);
        }
        static void SumElemetsOfArrayBeforeFirstMaxValue()
        {
            Console.WriteLine("Введите количество элементов массива:");
            int count = Int32.Parse(Console.ReadLine());
            int[] massiv = new int[count];
            massiv = EnterArrayValues(count);
            int stop;
            int sum = 0;
            stop = Array.IndexOf(massiv, massiv.Max());
            for (int i = 0; i < stop; i++)
            {
                sum += massiv[i];
            }
            PrintArrayValues(massiv);
            Console.WriteLine();
            Console.WriteLine("Максимальный элемент массива: " + massiv.Max());
            Console.WriteLine();
            Console.WriteLine("сумма элементов массива, расположенных до максимального значения массива: " + sum);
        }
        static int[] EnterArrayValues(int arrayMix)
        {
            int[] array = new int[arrayMix];
            Console.WriteLine("Введите элементы массива:");
            for (int i = 0; i < arrayMix; i++)
            {
                Console.Write("[{0}]: ", i);
                array[i] = Int32.Parse(Console.ReadLine());
            }
            return array;
        }
        static void PrintArrayValues(params int[] arrayShow)
        {
                for (int i = 0; i < arrayShow.Length; i++)
            {
                Console.Write(" [{0}]: ", i);
                Console.Write(arrayShow[i]);
            }

        }
        static void PrintValueAndIndexLastNegativeNumber()
        {
            int[] array = new int[8];
            array = EnterArrayValues(8);
            int negativeNumber;
            int[] revert = new int [8];
            Array.Copy(array, revert, 8);
            Array.Reverse(revert);
            for (int i = 0; i < revert.Length; i++)
            {
                if (array.Min() > 0)
                {
                    Console.WriteLine("Отрицательных значений не найдено");
                    break;
                }
                else if (revert[i] < 0)
                {
                    negativeNumber = revert[i];
                    Console.WriteLine("Последний отрицательный элемент массива" + negativeNumber);
                    Console.WriteLine("Номер последнего отрицательного значения массива" + Array.IndexOf(array, negativeNumber));
                    break;
                }
            }
            PrintArrayValues(array);
        }
        static void PrintModifiedArrayMidValuesAfterMaxValue()
        {
            Console.WriteLine("Задайте количество элементво одномерного массива");
            int size = Int32.Parse(Console.ReadLine());
            int[] array = new int[size];
            array = EnterArrayValues(size);
            int indexMaxValue = Array.IndexOf(array, array.Max());
            int midValue = array.Sum()/size;
            for (int i = ++indexMaxValue; i < size; i++)
            {
                array.SetValue(midValue, i);
            }
            PrintArrayValues(array);
        }
    }
}

